package com.example.dine.call.mapper;

import com.example.dine.call.entity.Queue;
import org.apache.ibatis.annotations.*;

import java.time.LocalDate;
import java.util.List;

/**
 * QueueMapper接口，用于操作Queue实体类的数据。
 */
@Mapper
public interface QueueMapper {

    /**
     * 插入一个新的排队记录到数据库。
     *
     * @param queue 包含要插入的排队信息的Queue对象。
     */
    @Insert("INSERT INTO queue (party_size, type_code, queue_number, status, created_at) VALUES (#{partySize}, #{typeCode}, #{queueNumber}, #{status}, #{createdAt})")
    void insert(Queue queue);

    /**
     * 根据排队ID删除一条排队记录。
     *
     * @param id 要删除的排队的ID。
     */
    @Delete("DELETE FROM queue WHERE id = #{id}")
    void deleteById(Long id);

    /**
     * 根据ID修改状态。
     *
     * @param id 排队ID。
     * @param status 目标状态。
     */
    @Update("UPDATE queue SET status = #{status} WHERE id = #{id}")
    void updateStatusById(Long id, Integer status);

    /**
     * 统计指定日期的数据量。
     *
     * @param date 指定的日期。
     * @return 数据量。
     */
    @Select("SELECT COUNT(*) FROM queue WHERE DATE(created_at) = #{date}")
    int countByDate(LocalDate date);

    /**
     * 根据指定日期查询列表。
     *
     * @param date 指定的日期。
     * @return 排队列表。
     */
    @Select("SELECT * FROM queue WHERE DATE(created_at) = #{date} ORDER BY created_at ASC")
    List<Queue> listByDate(LocalDate date);

}